Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Алгоритм Брезенхема для побудови прямих

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра автоматизованих систем управління

Інформація про роботу

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Комп'ютерна графіка
Група:
КН

Частина тексту файла

Міністерство освіти та науки України Національний університет «Львівська політехніка» Кафедра автоматизованих систем управління  Лабораторна робота №6 з дисципліни «Комп’ютерна графіка» на тему: “Алгоритм Брезенхема для побудови прямих” Мета: Освоїти алгоритм Брезенхема для побудови прямих. ТЕОРЕТИЧНІ ОСНОВИ Хоча алгоритм Брезенхема був спочатку розроблений для цифрових графопобудовувачів, проте він має застосування для растрових пристоїв з ЕПТ. Алгоритм вибирає оптимальні растрові координати для представлення відрізка. У процесі роботи одна з координат – або x, або y (в залежності від кутового коефіцієнта) – змінюється на одиницю. Зміна іншої координати (на 0 чи 1) залежить від відстані між дійсним положенням відрізка і найближчих координат сітки. Таку відстань ми називаємо похибкою. Алгоритм побудований так, що потрібно перевірити лише знак цієї похибки. Оскільки бажано перевіряти тільки знак похибки, то вона спочатку встановлюється рівною -½. Таким чином, якщо кутовий коефіцієнт відрізка дорівнює чи більший ½, то величина похибки в наступній точці растра з координатами (a,b) може бути обчислена як е = е + m, де m – кутовий коефіцієнт. Якщо е від’ємне, то відрізок пройде нижче середини піксела. Отже, пікселі на тому ж самому горизонтальному рівні краще апроксимує положення відрізка, тому y не збільшується. Якщо е додатнє, то відрізок пройде вище середньої точки. Отже, y збільшується на 1. Перш ніж розглядати наступний пікселі, необхідно відкоректувати відніманням від неї 1. Загальний алгоритм Брезенхема: Передбачається, що кінці відрізка не збігаються. Усі змінні вважаються цілими. Sigh – функція, що повертає -1, 0, 1 для від’ємного, нульового і додатного аргумента відповідно. ініціалізація змінних x=x1 y=y1 Dx=abs(x2 – x1) Dy=abs(y2 – y1) S1=Sign(x2 – x1) S2=Sign(y2 – y1) обмін значеньDx і Dy в залежності від кутового коефіцієнта нахилу відрізка if Dy>Dx then temp=Dx Dx=Dy Dy=temp Обмін=1 Else Обмін=0 ініціалізація е з виправленням на половину пікселі e=2*Dy – Dx основний цикл for i=1 to Dx do if e>=0 then if Обмін=1 then x=x+s1 else y=y+s2 while e>=0 do e=e – 2*Dx if Обмін=1 then y=y+s2 else x=x+s1 e=e+2*Dy Plot(x,y) finish ПОРЯДОК РОБОТИ Побудувати декартову двовимірну систему координат, у якій максимальне значення по осях х і у було би близько 10. Розграфте площину побудови відрізків у вигляді сітки, на якій будуть малюватися пікселі. Побудуйте псевдовідрізок, який би з’єднував початок з кінцем відрізку. Приведіть результат роботи алгоритму накреслення відрізку, методом Брезенхема, у якому би підсвічувалися пікселі, або ж клітинки сітки. Проаналізуйте результати. Текст програми unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Menus, StdCtrls, Buttons; type TForm1 = class(TForm) Bevel1: TBevel; PaintBox1: TPaintBox; BitBtn1: TBitBtn; Label3, Label4, Label5, Label6: TLabel; Label7, Label8, Label9, Label10: TLabel; Label11, Label12, Label13, Label1: TLabel; Label2, Label14, Label15, Label16: TLabel; Label17, Label18, Label19, Label20: TLabel; Label21: TLabel, Lbel22: TLabel; ex1, ey1, ex2, ey2: TEdit; procedure Chusto; procedure Sitka; procedure Tochka(x,y: integer); function Sign(k: integer): integer; procedure Vidrizok(x1,y1,x2,y2: integer); procedure FormCreate(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure PaintBox1Paint(Sender: TObject); private public end; const CP=20;//ціна поділки var Form1: TForm1; x0,y0,w,h,x1,x2,y1,y2: integer; new,draw: Boolean; implementation {$R *.DFM} procedure TForm1.Chusto; begin new:=true; PaintBox1.Repaint; end; procedure TForm1.Sitka; var j: integer; begin with PaintBox1.Canvas do begin Pen.Color:=clGray; for j:=0 to CP+1 do begin MoveTo(0+j*CP,h); LineTo(0+j*CP,0); MoveTo(0,h-j*CP); LineTo(w,h-j*CP); end; end; end; procedure TForm1.Tochka(x,y: in...
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини